package com.alks.function.mapper.administration;

import com.alks.entity.data.entity.PcEmpAttend;
import com.alks.entity.data.entity.PsHoliday2;
import com.alks.function.data.dto.administration.PcEmpAttendDto;
import com.alks.function.data.dto.administration.PcEmpAttendListDto;
import com.alks.function.data.dto.finance.attend.HolidayDataDTO;
import com.alks.function.data.request.administration.AttendanceDetailsRequest;
import com.alks.function.data.request.finance.salary.UpdateRemarkRequest;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@Mapper
public interface PcEmpAttendMapper extends BaseMapper<PcEmpAttend> {

    /**
     * 条件查询
     * @param request
     * @return
     */
    List<PcEmpAttendDto> getAll(AttendanceDetailsRequest request);

    /**
     * 考勤查询-单日
     * @param request
     */
    List<PcEmpAttendListDto> AttendanceDataQuery(AttendanceDetailsRequest request);

    /**
     * 查询考勤公休定义
     * @param years
     * @return
     */
    List<String> getPsHoliday2(String years);

    /**
     * 查询考勤公休定义V2
     * @param years
     * @return
     */
    List<HolidayDataDTO> getPsHoliday2V2(String years);

    /**
     * 批量添加节假日期
     * @param list
     */
    void addPsHoliday2(List<PsHoliday2> list);

    /**
     * 删除公休日期
     * @param years
     */
    void psHoliday2Del(String years);

    /**
     * 查询公休日期是否存在
     * @param years
     */
    String getPsHoliday2Date(String years);

    /**
     * 添加公休日期
     * @param psHoliday
     */
    void psHoliday2Add(PsHoliday2 psHoliday);

    /**
     * 修改公休日期
     * @param years
     * @param newYears
     * @param now
     * @param loginName
     * @param legalHoliday 是否是法定假日 1 是 0 否
     */
    void psHoliday2Update(String years, String newYears, LocalDateTime now, String loginName, Integer legalHoliday);

    /**
     * 查询考勤记录是否检核
     * @param localDate
     */
    String getPcEmpAttend(LocalDate localDate);
    /**
     * 删除考勤记录
     * @param localDate
     */
    void delPcEmpAttend(LocalDate localDate);

    /**
     * 添加考勤数据
     * @param pcEmpAttends
     */
    void addPcEmpAttend(List<PcEmpAttend> pcEmpAttends);

    /**
     * 查询工时
     * @param companyId
     * @param years
     * @return
     */
    List<PcEmpAttendListDto> getPcEmpAttendList(String companyId, String years);

    /**
     * 查询本月份所有记录
     * @param companyId
     * @param years
     * @return
     */
    List<PcEmpAttendListDto> getPcEmpAttendDateList(String companyId, String years);

    /**
     * 查询月份记录是否检核
     * @param companyId
     * @param years
     * @return
     */
    String getPcEmpAttendFlag(String companyId, String years);

    /**
     * 检核/取消月考勤资料
     * @param companyId
     * @param userName
     * @param now
     * @param flag
     * @param years
     * @return
     */
    int updateByFlag(@Param("companyId") String companyId, @Param("userName") String userName, @Param("now") LocalDateTime now, @Param("flag") String flag, @Param("years") String years);

    /**
     * 根据条件查询工时
     * @param request
     * @return
     */
    List<PcEmpAttendListDto> getPcEmpAttendList2(@Param("list") List<UpdateRemarkRequest> request);

    /**
     * 根据条件查询本月考勤记录
     * @param request
     * @return
     */
    List<PcEmpAttendListDto> getPcEmpAttendDateList2(@Param("list") List<UpdateRemarkRequest> request);

    /**
     * 查询当前月份天数所有员工工号
     * @param localDate
     * @return
     */
    List<String> getWorkerIds(LocalDate localDate);
}
